/*
 * @Author: your name
 * @Date: 2019-11-27 11:43:04
 * @LastEditTime: 2019-12-12 09:06:55
 * @LastEditors: Please set LastEditors
 * @Description: In User Settings Edit
 * @FilePath: \1926解军伟\commen.js
 */

//倒计时
function countDown(year, month, date, hour_arg, minute_arg, second_arg) {
    var now_time = Date.now();
    // 目标时间;
    var time_str = year + "/" + month + "/" + date + " " + hour_arg + ":" + minute_arg + ":" + second_arg;
    var target_time = new Date(time_str).getTime();

    // 获取两个时间之间的差值;
    var reduce_time = target_time - now_time;
    if (reduce_time < 0) {
        return false;
    }
    var ms = reduce_time % 1000;
    var sec = parseInt(reduce_time % (60 * 1000) / 1000);
    var min = parseInt(reduce_time % (60 * 60 * 1000) / 1000 / 60)
    var hour = parseInt(reduce_time % (24 * 60 * 60 * 1000) / 1000 / 60 / 60)
    var days = parseInt(reduce_time / 1000 / 60 / 60 / 24);
    return {
        day: days,
        hour: hour,
        minute: min,
        second: sec,
        ms: ms
    }
}
//事件监听的兼容
function on(dom, event_type, callback) {
    if (typeof dom.addEventListener === "function") {
        dom.addEventListener(event_type, callback);
    } else {
        // 兼容IE8的
        dom.attachEvent("on" + event_type, callback);
    }
}
//事件监听解除
function off(dom, event_type, callback) {
    if (typeof dom.removeEventListener === "function") {
        dom.removeEventListener(event_type, callback);
    } else {
        // 兼容IE8的
        dom.detachEvent("on" + event_type, callback);
    }
}
//事件只执行一次
function one(dom, event_type, callback) {
    var once_callback = function () {
        callback();
        off(dom, event_type, once_callback);
    }
    on(dom, event_type, once_callback);
}
//运动函数
function animate(ele, target, attr) {
    // 1. 关闭开启定时器 :
    //     1. 防止定时器多开导致定时器抛空无法关闭;
    //     2. 防止定时器变量冲突;
    clearInterval(ele.t);
    // 2. 获取当前元素的位置;
    var attr_value = getComputedStyle(ele)[attr];
    // 3. 处理获取到的元素位置 => 100px || 0.3 
    // 100px =parseInt> 100;
    // 0.3   = * 100>   30 
    var iNow = attr === "opacity" ? parseInt(attr_value * 100) : parseInt(attr_value);
    // * 当运动属性为 opacity 的时候目标点应该随着当前的attr值扩大100倍;
    target = attr === "opacity" ? target * 100 : target;
    // 定时器 : 
    ele.t = setInterval(function () {
        // 4. 计算速度 : target - iNow  => 距离 ;
        // 速度为距离的 十分之一 ;
        var speed = (target - iNow) / 10;
        // 速度需要进行取整 ? 如果不取整根据我们每次走十分之的算法一辈子都到达不了目标点;
        speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
        // 5. 根据inow重新计算元素位置;
        iNow = iNow + speed;
        // 6. 进行数据的赋值，让元素运动起来;
        ele.style[attr] = attr === "opacity" ? iNow / 100 : iNow + "px";
        // 7. 在到达目标点之后关闭定时器;
        if (iNow === target) {
            clearInterval(ele.t);
        }
    }, 30)
}

//cookie类

//多个cookie 中获取某一个特定名称的
function getCookie(name) {
    // 分号后面有空格,分号后面有空格,分号后面有空格
    var cookie_array = document.cookie.split("; ");
    // console.log(cookie_array)
    for (var i = 0; i < cookie_array.length; i++) {
        // 取出每一条cookie
        var cookie_item = cookie_array[i].split("=");
        // 每一套cookie分成key和value;
        // 根据key 去获取value值;
        // console.log(cookie_item)
        if (cookie_item[0] === name) {
            return decodeURIComponent(cookie_item[1]);
        }
    }
}
//设置cookie
function setCookie(name, value, expires, path, domain) {
    var cookie_str = "";
    cookie_str += name + "=" + value;
    // 表示不为空
    if (expires && typeof expires === "number") {
        // 获取一个相应日期的日期对象;
        var d = new Date();
        d.setDate(d.getDate() + expires);
        // 拼接对应的字符串;
        cookie_str += ";expires=" + d;
    }
    // str = "key=value;expires="日期
    if (path && typeof path === "string") {
        // 拼接对应的字符串;
        cookie_str += ";path=" + path;
    }
    if (domain && typeof domain === "string") {
        // 拼接对应的字符串;
        cookie_str += ";domain=" + domain;
    }
    // console.log(cookie_str);
    document.cookie = cookie_str;
}

//删除cookie
function removeCookie(name, path) {
    setCookie(name, null, -1, path)
}